/* global add_completion_callback */
/* global setup */

/*
 * This file is intended for vendors to implement code needed to integrate
 * testharness.js tests with their own test systems.
 *
 * Typically test system integration will attach callbacks when each test has
 * run, using add_result_callback(callback(test)), or when the whole test file
 * has completed, using
 * add_completion_callback(callback(tests, harness_status)).
 *
 * For more documentation about the callback functions and the
 * parameters they are called with see testharness.js
 */

function dump_test_results(tests, status) {
  var results_element = document.createElement('script')
  results_element.type = 'text/json'
  results_element.id = '__testharness__results__'
  var test_results = tests.map(function (x) {
    return {
      name: x.name,
      status: x.status,
      message: x.message,
      stack: x.stack,
    }
  })
  var data = {
    test: window.location.href,
    tests: test_results,
    status: status.status,
    message: status.message,
    stack: status.stack,
  }
  results_element.textContent = JSON.stringify(data)

  // To avoid a HierarchyRequestError with XML documents, ensure that 'results_element'
  // is inserted at a location that results in a valid document.
  var parent = document.body
    ? document.body // <body> is required in XHTML documents
    : document.documentElement // fallback for optional <body> in HTML5, SVG, etc.

  parent.appendChild(results_element)
}

add_completion_callback(dump_test_results)

/* If the parent window has a testharness_properties object,
 * we use this to provide the test settings. This is used by the
 * default in-browser runner to configure the timeout and the
 * rendering of results
 */
try {
  if (window.opener && 'testharness_properties' in window.opener) {
    /* If we pass the testharness_properties object as-is here without
     * JSON stringifying and reparsing it, IE fails & emits the message
     * "Could not complete the operation due to error 80700019".
     */
    setup(JSON.parse(JSON.stringify(window.opener.testharness_properties)))
  }
} catch (e) {}
// vim: set expandtab shiftwidth=4 tabstop=4:
